// sound file me.dir() + "Page Turn.wav" => string filename; SndBuf buf => dac; filename => buf.read; .4 => buf.gain; 1 => float rate => buf.rate; repeat (2) { 0 => buf.pos; 2.5::second / rate => now; } while (rate < 1.4) { 0 => buf.pos; 1.6::second / rate => now; 1.1 *=> rate => buf.rate; } spork ~ swell(40); spork ~ swell(62); spork ~ swell(90); spork ~ swell(117); spork ~ swell(165); spork ~ swell(210); spork ~ swell(300); while (rate < 2) { 0 => buf.pos; 1.6::second / rate => now; 1.1 *=> rate => buf.rate; } repeat (8) { 0 => buf.pos; 1.6::second / rate => now; } while (rate < 5.5) { 0 => buf.pos; rate => buf.rate; 1.6::second / rate => now; 1.12 *=> rate; buf.gain() + .2 / 9 => buf.gain; } 1 => float flapGain; while (flapGain > 0) { spork ~ flap(flapGain); Math.random2f(.05, .25)::second => now; 1. / 40 -=> flapGain; } 2::second => now; fun void swell(float freq) { Bowed b => Pan2 p => NRev nr => PRCRev r => dac; b.freq(freq); b.bowPosition(.22); b.startBowing(1); b.volume(1); Gen5 exp; [.1, 1., 1.] => exp.coefs; Envelope lookup => blackhole; lookup.duration(14::second); 0. => lookup.value; lookup.keyOn(); spork ~ freqUpAndPan(b, p); while (true) { 1 - exp.lookup(lookup.value()) => b.bowPosition; exp.lookup(lookup.value()) * .15 => b.volume; if (lookup.value() >= 1.) break; 10::ms => now; } b.stopBowing(0); 6::second => now; } fun void freqUpAndPan(Bowed b, Pan2 p) { 13.3::second => now; if (maybe) b.freq() * 7 / 5 => b.freq; if (maybe) b.freq() * 4 / 5 => b.freq; if (maybe) b.freq() * 2 * 1.059463 => b.freq; if (maybe) b.freq() * 2 * 1.059463 => b.freq; } fun void flap(float g) { me.dir() + "Page Turn.wav" => string filename; SndBuf buf => dac; filename => buf.read; buf.samples() - 1 => buf.pos; .6 * g => buf.gain; -4 * Math.random2f(2, .5) => buf.rate; buf.samples() / 6 * samp => now; }